package pruebas;

import java.util.Observable;
import java.util.Observer;

import modelo.Cronometro;
import junit.framework.TestCase;

public class CronometroTest extends TestCase {
	private static long INTERVALO = Cronometro.INTERVALO_DE_TIEMPO; 
	final long deltaTiempo = INTERVALO / 2;
	
	public void testIniciarCorectamente() throws InterruptedException{
		Cronometro.getInstance().iniciar();
		assertTrue(Cronometro.getInstance().estaEncendido() == true);
		Thread.sleep(INTERVALO + deltaTiempo);
		assertTrue(Cronometro.getInstance().getTiempo() != 0);
	}
	
	public void testIncrementaElTiempoCorrectamente() throws InterruptedException{
		Cronometro.getInstance().iniciar();	
		assertEquals(0, Cronometro.getInstance().getTiempo(), 0.001);
		Thread.sleep(INTERVALO);
		assertEquals(INTERVALO, Cronometro.getInstance().getTiempo(), 0.001);
	}
	
	public void testNotificaObservadoresCorrectamente() throws InterruptedException{
		
		/** clase que hace de supuesto observador del cronometro */
		final class Observador implements Observer{
			
			public double tiempo;
			
			public Observador(){
				tiempo = 0;
			}
			
			public void update(Observable o, Object args){
				tiempo = Cronometro.getInstance().getTiempo();
			};
			
			public double getTiempo(){
				return tiempo;
			}
		};
		
		Cronometro.getInstance().iniciar();
		Observador observador = new Observador();
		Cronometro.getInstance().deleteObservers();
		Cronometro.getInstance().addObserver(observador);
		assertTrue(observador.getTiempo() == 0);
		Thread.sleep(INTERVALO + deltaTiempo);
		assertTrue(observador.getTiempo() != 0);
	}
}